home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Interfaces / PInterfaces / OSUtils.p < prev    next >
Encoding:
Text File  |  1995-07-06  |  13.0 KB  |  530 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        OSUtils.p
  3.  
  4.      Contains:    OS Utilities Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.1 in “MPW Latest” on ETO #18
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs@applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. }
  19.  
  20. {$IFC UNDEFINED UsingIncludes}
  21. {$SETC UsingIncludes := 0}
  22. {$ENDC}
  23.  
  24. {$IFC NOT UsingIncludes}
  25.  UNIT OSUtils;
  26.  INTERFACE
  27. {$ENDC}
  28.  
  29. {$IFC UNDEFINED __OSUTILS__}
  30. {$SETC __OSUTILS__ := 1}
  31.  
  32. {$I+}
  33. {$SETC OSUtilsIncludes := UsingIncludes}
  34. {$SETC UsingIncludes := 1}
  35.  
  36.  
  37. {$IFC UNDEFINED __TYPES__}
  38. {$I Types.p}
  39. {$ENDC}
  40. {    ConditionalMacros.p                                            }
  41.  
  42. {$IFC UNDEFINED __MIXEDMODE__}
  43. {$I MixedMode.p}
  44. {$ENDC}
  45.  
  46. {$IFC UNDEFINED __MEMORY__}
  47. {$I Memory.p}
  48. {$ENDC}
  49.  
  50. {$PUSH}
  51. {$ALIGN MAC68K}
  52. {$LibExport+}
  53.  
  54. CONST
  55.     useFree                        = 0;
  56.     useATalk                    = 1;
  57.     useAsync                    = 2;
  58.     useExtClk                    = 3;                            {Externally clocked}
  59.     useMIDI                        = 4;
  60. { Environs Equates }
  61.     curSysEnvVers                = 2;                            {Updated to equal latest SysEnvirons version}
  62. { Machine Types }
  63.     envMac                        = -1;
  64.     envXL                        = -2;
  65.     envMachUnknown                = 0;
  66.     env512KE                    = 1;
  67.     envMacPlus                    = 2;
  68.     envSE                        = 3;
  69.     envMacII                    = 4;
  70.     envMacIIx                    = 5;
  71.     envMacIIcx                    = 6;
  72.     envSE30                        = 7;
  73.     envPortable                    = 8;
  74.     envMacIIci                    = 9;
  75.     envMacIIfx                    = 11;
  76. { CPU types }
  77.     envCPUUnknown                = 0;
  78.  
  79.     env68000                    = 1;
  80.     env68010                    = 2;
  81.     env68020                    = 3;
  82.     env68030                    = 4;
  83.     env68040                    = 5;
  84. { Keyboard types }
  85.     envUnknownKbd                = 0;
  86.     envMacKbd                    = 1;
  87.     envMacAndPad                = 2;
  88.     envMacPlusKbd                = 3;
  89.     envAExtendKbd                = 4;
  90.     envStandADBKbd                = 5;
  91.     envPrtblADBKbd                = 6;
  92.     envPrtblISOKbd                = 7;
  93.     envStdISOADBKbd                = 8;
  94.     envExtISOADBKbd                = 9;
  95.     false32b                    = 0;                            {24 bit addressing error}
  96.     true32b                        = 1;                            {32 bit addressing error}
  97. { result types for RelString Call }
  98.     sortsBefore                    = -1;                            {first string < second string}
  99.     sortsEqual                    = 0;                            {first string = second string}
  100.     sortsAfter                    = 1;                            {first string > second string}
  101.  
  102. { Toggle results }
  103.     toggleUndefined                = 0;
  104.     toggleOK                    = 1;
  105.     toggleBadField                = 2;
  106.     toggleBadDelta                = 3;
  107.     toggleBadChar                = 4;
  108.     toggleUnknown                = 5;
  109.     toggleBadNum                = 6;
  110.     toggleOutOfRange            = 7;                            {synonym for toggleErr3}
  111.     toggleErr3                    = 7;
  112.     toggleErr4                    = 8;
  113.     toggleErr5                    = 9;
  114. { Date equates }
  115.     smallDateBit                = 31;                            {Restrict valid date/time to range of Time global}
  116.     togChar12HourBit            = 30;                            {If toggling hour by char, accept hours 1..12 only}
  117.     togCharZCycleBit            = 29;                            {Modifier for togChar12HourBit: accept hours 0..11 only}
  118.     togDelta12HourBit            = 28;                            {If toggling hour up/down, restrict to 12-hour range (am/pm)}
  119.     genCdevRangeBit                = 27;                            {Restrict date/time to range used by genl CDEV}
  120.     validDateFields                = -1;
  121.     maxDateField                = 10;
  122.     eraMask                        = $0001;
  123.     yearMask                    = $0002;
  124.     monthMask                    = $0004;
  125.     dayMask                        = $0008;
  126.     hourMask                    = $0010;
  127.     minuteMask                    = $0020;
  128.     secondMask                    = $0040;
  129.     dayOfWeekMask                = $0080;
  130.     dayOfYearMask                = $0100;
  131.     weekOfYearMask                = $0200;
  132.     pmMask                        = $0400;
  133.     dateStdMask                    = $007F;                        {default for ValidDate flags and ToggleDate TogglePB.togFlags}
  134.  
  135.     eraField                    = 0;
  136.     yearField                    = 1;
  137.     monthField                    = 2;
  138.     dayField                    = 3;
  139.     hourField                    = 4;
  140.     minuteField                    = 5;
  141.     secondField                    = 6;
  142.     dayOfWeekField                = 7;
  143.     dayOfYearField                = 8;
  144.     weekOfYearField                = 9;
  145.     pmField                        = 10;
  146.     res1Field                    = 11;
  147.     res2Field                    = 12;
  148.     res3Field                    = 13;
  149.  
  150.     
  151. TYPE
  152.     LongDateField = SignedByte;
  153.  
  154.  
  155. CONST
  156.     dummyType                    = 0;
  157.     vType                        = 1;
  158.     ioQType                        = 2;
  159.     drvQType                    = 3;
  160.     evType                        = 4;
  161.     fsQType                        = 5;
  162.     sIQType                        = 6;
  163.     dtQType                        = 7;
  164.     nmType                        = 8;
  165.  
  166.     
  167. TYPE
  168.     QTypes = SignedByte;
  169.  
  170.  
  171. CONST
  172.     OSTrap                        = 0;
  173.     ToolTrap                    = 1;
  174.  
  175.     
  176. TYPE
  177.     TrapType = SignedByte;
  178.  
  179.     SysParmType = PACKED RECORD
  180.         valid:                    UInt8;
  181.         aTalkA:                    UInt8;
  182.         aTalkB:                    UInt8;
  183.         config:                    UInt8;
  184.         portA:                    INTEGER;
  185.         portB:                    INTEGER;
  186.         alarm:                    LONGINT;
  187.         font:                    INTEGER;
  188.         kbdPrint:                INTEGER;
  189.         volClik:                INTEGER;
  190.         misc:                    INTEGER;
  191.     END;
  192.  
  193.     SysPPtr = ^SysParmType;
  194.  
  195.     QElemPtr = ^QElem;
  196.  
  197.     QElem = RECORD
  198.         qLink:                    QElemPtr;
  199.         qType:                    INTEGER;
  200.         qData:                    ARRAY [0..0] OF INTEGER;
  201.     END;
  202.  
  203.     QHdrPtr = ^QHdr;
  204.  
  205.     QHdr = RECORD
  206.         qFlags:                    INTEGER;
  207.         qHead:                    QElemPtr;
  208.         qTail:                    QElemPtr;
  209.     END;
  210.  
  211.     {
  212.         DeferredTaskProcPtr uses register based parameters on the 68k and cannot
  213.         be written in or called from a high-level language without the help of
  214.         mixed mode or assembly glue.
  215.  
  216.         In:
  217.          => dtParam         A1.L
  218.     }
  219.     DeferredTaskProcPtr = Register68kProcPtr;  { register PROCEDURE DeferredTask(dtParam: LONGINT); }
  220.     DeferredTaskUPP = UniversalProcPtr;
  221.  
  222.     DeferredTask = RECORD
  223.         qLink:                    QElemPtr;
  224.         qType:                    INTEGER;
  225.         dtFlags:                INTEGER;
  226.         dtAddr:                    DeferredTaskUPP;
  227.         dtParam:                LONGINT;
  228.         dtReserved:                LONGINT;
  229.     END;
  230.  
  231.     DeferredTaskPtr = ^DeferredTask;
  232.  
  233.     SysEnvRec = RECORD
  234.         environsVersion:        INTEGER;
  235.         machineType:            INTEGER;
  236.         systemVersion:            INTEGER;
  237.         processor:                INTEGER;
  238.         hasFPU:                    BOOLEAN;
  239.         hasColorQD:                BOOLEAN;
  240.         keyBoardType:            INTEGER;
  241.         atDrvrVersNum:            INTEGER;
  242.         sysVRefNum:                INTEGER;
  243.     END;
  244.  
  245.     MachineLocation = RECORD
  246.         latitude:                Fract;
  247.         longitude:                Fract;
  248.         CASE INTEGER OF
  249.         0: (
  250.             dlsDelta:                    SInt8;                                {signed byte; daylight savings delta}
  251.            );
  252.         1: (
  253.             gmtDelta:                    LONGINT;                            {must mask - see documentation}
  254.            );
  255.     END;
  256.  
  257.     DateTimeRec = RECORD
  258.         year:                    INTEGER;
  259.         month:                    INTEGER;
  260.         day:                    INTEGER;
  261.         hour:                    INTEGER;
  262.         minute:                    INTEGER;
  263.         second:                    INTEGER;
  264.         dayOfWeek:                INTEGER;
  265.     END;
  266.  
  267.     LongDateTime = wide;
  268.  
  269.     LongDateCvt = RECORD
  270.         CASE INTEGER OF
  271.         0: (
  272.             c:                            wide;
  273.            );
  274.         1: (
  275.             lHigh:                        UInt32;
  276.             lLow:                        UInt32;
  277.            );
  278.     END;
  279.  
  280.     LongDateRec = RECORD
  281.         CASE INTEGER OF
  282.         0: (
  283.             era:                        INTEGER;
  284.             year:                        INTEGER;
  285.             month:                        INTEGER;
  286.             day:                        INTEGER;
  287.             hour:                        INTEGER;
  288.             minute:                        INTEGER;
  289.             second:                        INTEGER;
  290.             dayOfWeek:                    INTEGER;
  291.             dayOfYear:                    INTEGER;
  292.             weekOfYear:                    INTEGER;
  293.             pm:                            INTEGER;
  294.             res1:                        INTEGER;
  295.             res2:                        INTEGER;
  296.             res3:                        INTEGER;
  297.            );
  298.         1: (
  299.             list:                        ARRAY [0..13] OF INTEGER;            {Index by LongDateField!}
  300.            );
  301.         2: (
  302.             eraAlt:                        INTEGER;
  303.             oldDate:                    DateTimeRec;
  304.            );
  305.     END;
  306.  
  307.     DateDelta = SInt8;
  308.  
  309.     TogglePB = RECORD
  310.         togFlags:                LONGINT;                                {caller normally sets low word to dateStdMask=$7F}
  311.         amChars:                ResType;                                {from 'itl0', but uppercased}
  312.         pmChars:                ResType;                                {from 'itl0', but uppercased}
  313.         reserved:                ARRAY [0..3] OF LONGINT;
  314.     END;
  315.  
  316.     ToggleResults = INTEGER;
  317.  
  318. CONST
  319.     uppDeferredTaskProcInfo = $0000B802; { Register PROCEDURE (4 bytes in A1); }
  320.  
  321. FUNCTION NewDeferredTaskProc(userRoutine: DeferredTaskProcPtr): DeferredTaskUPP;
  322.     {$IFC NOT GENERATINGCFM }
  323.     INLINE $2E9F;
  324.     {$ENDC}
  325.  
  326. PROCEDURE CallDeferredTaskProc(dtParam: LONGINT; userRoutine: DeferredTaskUPP);
  327.     {$IFC NOT GENERATINGCFM}
  328.     {To be implemented:  Glue to move parameters into registers.}
  329.     {$ENDC}
  330.  
  331. PROCEDURE LongDateToSeconds({CONST}VAR lDate: LongDateRec; VAR lSecs: LongDateTime);
  332.     {$IFC NOT GENERATINGCFM}
  333.     INLINE $2F3C, $8008, $FFF2, $A8B5;
  334.     {$ENDC}
  335. PROCEDURE LongSecondsToDate(VAR lSecs: LongDateTime; VAR lDate: LongDateRec);
  336.     {$IFC NOT GENERATINGCFM}
  337.     INLINE $2F3C, $8008, $FFF0, $A8B5;
  338.     {$ENDC}
  339. FUNCTION ToggleDate(VAR lSecs: LongDateTime; field: ByteParameter; delta: ByteParameter; ch: INTEGER; {CONST}VAR params: TogglePB): ToggleResults;
  340.     {$IFC NOT GENERATINGCFM}
  341.     INLINE $2F3C, $820E, $FFEE, $A8B5;
  342.     {$ENDC}
  343. FUNCTION ValidDate({CONST}VAR vDate: LongDateRec; flags: LONGINT; VAR newSecs: LongDateTime): INTEGER;
  344.     {$IFC NOT GENERATINGCFM}
  345.     INLINE $2F3C, $820C, $FFE4, $A8B5;
  346.     {$ENDC}
  347. FUNCTION IsMetric: BOOLEAN;
  348.     {$IFC NOT GENERATINGCFM}
  349.     INLINE $3F3C, $0004, $A9ED;
  350.     {$ENDC}
  351. FUNCTION GetSysPPtr: SysPPtr;
  352.     {$IFC NOT GENERATINGCFM}
  353.     INLINE $2EBC, $0000, $01F8;
  354.     {$ENDC}
  355. FUNCTION ReadDateTime(VAR time: LONGINT): OSErr;
  356.     {$IFC NOT GENERATINGCFM}
  357.     INLINE $205F, $A039, $3E80;
  358.     {$ENDC}
  359. PROCEDURE GetDateTime(VAR secs: LONGINT);
  360.     {$IFC NOT GENERATINGCFM}
  361.     INLINE $205F, $20B8, $020C;
  362.     {$ENDC}
  363. FUNCTION SetDateTime(time: LONGINT): OSErr;
  364.     {$IFC NOT GENERATINGCFM}
  365.     INLINE $201F, $A03A, $3E80;
  366.     {$ENDC}
  367. PROCEDURE SetTime({CONST}VAR d: DateTimeRec);
  368.     {$IFC NOT GENERATINGCFM}
  369.     INLINE $205F, $A9C7, $A03A;
  370.     {$ENDC}
  371. PROCEDURE GetTime(VAR d: DateTimeRec);
  372.     {$IFC NOT GENERATINGCFM}
  373.     INLINE $205F, $2038, $020C, $A9C6;
  374.     {$ENDC}
  375. PROCEDURE DateToSeconds({CONST}VAR d: DateTimeRec; VAR secs: LONGINT);
  376. PROCEDURE SecondsToDate(secs: LONGINT; VAR d: DateTimeRec);
  377.     {$IFC NOT GENERATINGCFM}
  378.     INLINE $205F, $201F, $A9C6;
  379.     {$ENDC}
  380. PROCEDURE SysBeep(duration: INTEGER);
  381.     {$IFC NOT GENERATINGCFM}
  382.     INLINE $A9C8;
  383.     {$ENDC}
  384. FUNCTION DTInstall(dtTaskPtr: DeferredTaskPtr): OSErr;
  385.     {$IFC NOT GENERATINGCFM}
  386.     INLINE $205F, $A082, $3E80;
  387.     {$ENDC}
  388. FUNCTION GetMMUMode : ByteParameter;
  389.     {$IFC NOT CFMSYSTEMCALLS}
  390.     INLINE $1EB8, $0CB2;            { MOVE.b $0CB2,(SP) }
  391.     {$ENDC}
  392.  
  393. PROCEDURE SwapMMUMode(VAR mode: SInt8);
  394.     {$IFC NOT GENERATINGCFM}
  395.     INLINE $205F, $1010, $A05D, $1080;
  396.     {$ENDC}
  397. {$IFC SystemSixOrLater }
  398. FUNCTION SysEnvirons(versionRequested: INTEGER; VAR theWorld: SysEnvRec): OSErr;
  399.     {$IFC NOT GENERATINGCFM}
  400.     INLINE $205F, $301F, $A090, $3E80;
  401.     {$ENDC}
  402. {$ELSEC}
  403. FUNCTION SysEnvirons(versionRequested: INTEGER; VAR theWorld: SysEnvRec): OSErr;
  404. {$ENDC}
  405. PROCEDURE Delay(numTicks: LONGINT; VAR finalTicks: LONGINT);
  406.     {$IFC NOT GENERATINGCFM}
  407.     INLINE $225F, $205F, $A03B, $2280;
  408.     {$ENDC}
  409. {$IFC OLDROUTINENAMES  & NOT GENERATINGCFM }
  410. FUNCTION GetTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  411.     {$IFC NOT GENERATINGCFM}
  412.     INLINE $301F, $A146, $2E88;
  413.     {$ENDC}
  414. PROCEDURE SetTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  415.     {$IFC NOT GENERATINGCFM}
  416.     INLINE $301F, $205F, $A047;
  417.     {$ENDC}
  418. {$ENDC}
  419. FUNCTION NGetTrapAddress(trapNum: INTEGER; tTyp: ByteParameter): UniversalProcPtr;
  420. PROCEDURE NSetTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER; tTyp: ByteParameter);
  421. FUNCTION GetOSTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  422.     {$IFC NOT GENERATINGCFM}
  423.     INLINE $301F, $A346, $2E88;
  424.     {$ENDC}
  425. PROCEDURE SetOSTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  426.     {$IFC NOT GENERATINGCFM}
  427.     INLINE $301F, $205F, $A247;
  428.     {$ENDC}
  429. FUNCTION GetToolTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  430.     {$IFC NOT GENERATINGCFM}
  431.     INLINE $301F, $A746, $2E88;
  432.     {$ENDC}
  433. PROCEDURE SetToolTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  434.     {$IFC NOT GENERATINGCFM}
  435.     INLINE $301F, $205F, $A647;
  436.     {$ENDC}
  437. FUNCTION GetToolboxTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  438.     {$IFC NOT GENERATINGCFM}
  439.     INLINE $301F, $A746, $2E88;
  440.     {$ENDC}
  441. PROCEDURE SetToolboxTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  442.     {$IFC NOT GENERATINGCFM}
  443.     INLINE $301F, $205F, $A647;
  444.     {$ENDC}
  445. FUNCTION WriteParam: OSErr;
  446. PROCEDURE Enqueue(qElement: QElemPtr; qHeader: QHdrPtr);
  447.     {$IFC NOT GENERATINGCFM}
  448.     INLINE $225F, $205F, $A96F;
  449.     {$ENDC}
  450. FUNCTION Dequeue(qElement: QElemPtr; qHeader: QHdrPtr): OSErr;
  451.     {$IFC NOT GENERATINGCFM}
  452.     INLINE $225F, $205F, $A96E, $3E80;
  453.     {$ENDC}
  454. FUNCTION SetCurrentA5: LONGINT;
  455.     {$IFC NOT GENERATINGCFM}
  456.     INLINE $2E8D, $2A78, $0904;
  457.     {$ENDC}
  458. FUNCTION SetA5(newA5: LONGINT): LONGINT;
  459.     {$IFC NOT GENERATINGCFM}
  460.     INLINE $2F4D, $0004, $2A5F;
  461.     {$ENDC}
  462. {$IFC NOT SystemSevenOrLater }
  463. PROCEDURE Environs(VAR rom: INTEGER; VAR machine: INTEGER);
  464. {$ENDC}
  465. FUNCTION InitUtil: OSErr;
  466.     {$IFC NOT GENERATINGCFM}
  467.     INLINE $A03F, $3E80;
  468.     {$ENDC}
  469. {$IFC GENERATINGPOWERPC }
  470. PROCEDURE MakeDataExecutable(baseAddress: UNIV Ptr; length: LONGINT);
  471. {$ENDC}
  472. {$IFC GENERATING68K }
  473. FUNCTION SwapInstructionCache(cacheEnable: BOOLEAN): BOOLEAN;
  474. PROCEDURE FlushInstructionCache;
  475.     {$IFC NOT GENERATINGCFM}
  476.     INLINE $7001, $A098;
  477.     {$ENDC}
  478. FUNCTION SwapDataCache(cacheEnable: BOOLEAN): BOOLEAN;
  479. PROCEDURE FlushDataCache;
  480.     {$IFC NOT GENERATINGCFM}
  481.     INLINE $7003, $A098;
  482.     {$ENDC}
  483. PROCEDURE FlushCodeCache;
  484.     {$IFC NOT GENERATINGCFM}
  485.     INLINE $A0BD;
  486.     {$ENDC}
  487. PROCEDURE FlushCodeCacheRange(address: UNIV Ptr; count: LONGINT);
  488.     {$IFC NOT GENERATINGCFM}
  489.     INLINE $225F, $205F, $7009, $A098;
  490.     {$ENDC}
  491. {$ENDC}
  492. PROCEDURE ReadLocation(VAR loc: MachineLocation);
  493.     {$IFC NOT GENERATINGCFM}
  494.     INLINE $205F, $203C, $000C, $00E4, $A051;
  495.     {$ENDC}
  496. PROCEDURE WriteLocation({CONST}VAR loc: MachineLocation);
  497.     {$IFC NOT GENERATINGCFM}
  498.     INLINE $205F, $203C, $000C, $00E4, $A052;
  499.     {$ENDC}
  500. {$IFC OLDROUTINENAMES }
  501. PROCEDURE LongDate2Secs({CONST}VAR lDate: LongDateRec; VAR lSecs: LongDateTime);
  502.     {$IFC NOT GENERATINGCFM}
  503.     INLINE $2F3C, $8008, $FFF2, $A8B5;
  504.     {$ENDC}
  505. PROCEDURE LongSecs2Date(VAR lSecs: LongDateTime; VAR lDate: LongDateRec);
  506.     {$IFC NOT GENERATINGCFM}
  507.     INLINE $2F3C, $8008, $FFF0, $A8B5;
  508.     {$ENDC}
  509. FUNCTION IUMetric: BOOLEAN;
  510.     {$IFC NOT GENERATINGCFM}
  511.     INLINE $3F3C, $0004, $A9ED;
  512.     {$ENDC}
  513. PROCEDURE Date2Secs({CONST}VAR d: DateTimeRec; VAR secs: LONGINT);
  514. PROCEDURE Secs2Date(secs: LONGINT; VAR d: DateTimeRec);
  515.     {$IFC NOT GENERATINGCFM}
  516.     INLINE $205F, $201F, $A9C6;
  517.     {$ENDC}
  518. {$ENDC}
  519.  
  520. {$ALIGN RESET}
  521. {$POP}
  522.  
  523. {$SETC UsingIncludes := OSUtilsIncludes}
  524.  
  525. {$ENDC} {__OSUTILS__}
  526.  
  527. {$IFC NOT UsingIncludes}
  528.  END.
  529. {$ENDC}
  530.